/*
 * seq_list.h
 *
 *  Created on: 2020��9��18��
 *      Author: Administrator
 */
#include <stdbool.h>
#include "../common.h"
#ifndef SEQ_LIST_H_
#define SEQ_LIST_H_
#define MAXSIZE 100

typedef struct SeqList{
	ElemType elem[MAXSIZE];  // 线性表占用的数组空间
	int last;                // 记录线性表最后一个元素的位置下标，空表为-1
} SeqList;

/**
 * 初始化顺序表
 */
bool init_seq_list(SeqList* list);
/**
 * 创建顺序表
 */
bool create_seq_list(SeqList* list, ElemType array[], int length);

bool is_empty_seq_list(SeqList* list);

bool is_full_seq_list(SeqList* list);
/**
 * 顺序查找
 * 返回元素的下标，查找失败返回-1
 */
int search_seq_list(SeqList* list, ElemType key);
/**
 * 折半查找（二分查找）
 * 前提：顺序表中的元素有序
 * 查找成功返回元素下标，查找失败返回-1
 */
int bin_search_seq_list(SeqList* list, ElemType key);
/**
 * 折半查找（递归实现）
 * 采用分治策略
 * 查找成功返回元素下标，查找失败返回-1
 */
int rbin_search_seq_list(SeqList* list, ElemType key, int low, int high);
/**
 * 在第index个元素之前插入元素
 */
bool insert_seq_list(SeqList* list, int index, ElemType e);
/**
 * 在顺序表结尾添加元素
 */
bool insert_tail_seq_list(SeqList* list, ElemType e);
/**
 * 删除第index个元素
 * 返回-1，当出错时
 */
ElemType delete_seq_list(SeqList* list, int index);
/**
 * 合并两个非递减有序顺序表
 * 返回也是非递减有序的顺序表
 */
SeqList* merge_seq_list(SeqList* listA, SeqList* listB);

void print_seq_list(SeqList* list);

#endif /* SEQ_LIST_H_ */
